首先先做個測試用的基本頁面,裡面放個表單
"<%@ page language=""java"" contentType=""text/html; charset=utf-8""
pageEncoding=""utf-8""%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + ""://"" + request.getServerName()
+ "":"" + request.getServerPort() + path + ""/"";
%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%=path %>
<br>
<%=basePath %>
<br>
<form action=""<%=basePath%>LoginSvl"" method= ""post"">
<table align = ""center"">
<tr><td height = 200></td></tr>
<tr><td>用戶名:</td><td><input type = ""text"" name = ""uname""></td></tr>
<tr><td>密碼:</td><td><input type = ""password"" name = ""pwd""></td></tr>
<tr>
<td colspan = ""2"" align = ""center"">
<input type = ""submit"" value = ""提交""/>${msg}
</td>
</tr>
</table>
</form>"
這邊pageEncoding設為utf-8是為了能顯示中文。
訪問登入頁面的網址時,默認會觸發Servlet的doGet()方法。
然而在同樣的頁面送出表單時,會啟動一樣的Servlet,但觸發doPost()方法。
具體設定由頁面上的標籤進行設定如下:
<form action="<%=basePath%>LoginSvl" method= "post">
可以設定表單的資料要送往哪個Servlet,以及觸發的方法。
不過在登入頁面通常就送往同一個Servlet,以POST方式送件。
為了得到Servlet的路徑,使用以下的request方法先得到網站的路徑。
"request.getScheme() + ""://"" + request.getServerName()
+ "":"" + request.getServerPort() + request.getContextPath() + ""/"";"
以上路徑再加上Servlet名稱,即是完整路徑。
新增LoginSvl
在com.aaa.action包下新增LoginSvl。
改寫doGet()和doPost()方法如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/main/login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
request.setAttribute("uname", uname);
request.getRequestDispatcher("/main/hello.jsp").forward(request, response);
}
可以看出使用者進入登入頁面時,觸發doGet(),被轉發至login.jsp填表單。
填完之後送出表單,會觸發同一個Servlet的doPost(),把表單的參數都存進變數後,設置到request的屬性裡面。然後把使用者轉發到歡迎頁面去。
歡迎頁面可以新增或直接使用上一章寫的hello.jsp,
只要把顯示內容改為Hello,${uname}即可。
這邊就可以看出,用request即可攜帶資料在輸入頁面、後台以及輸出頁面之間趴趴造。
不過,由於Servlet預設以"ISO-8859-1"去解讀資料,因此若你在登入頁面輸入了中文名字,應該會在輸出頁面看到亂碼。
要修正此情形,需在servlet裡面加入以下代碼:
request.setCharacterEncoding("UTF-8");
註:在開發過程中,有時候會手殘刪錯檔案(就是在下),照以下步驟可以救回來:
以上 就是這次的筆記內容